package cn.com.wxd.biz.log;

import java.util.List;

import cn.com.wxd.entity.log.AccesslogInfo;
import cn.com.wxd.entity.log.AccesslogTempInfo;
import cn.com.wxd.entity.log.UserLogInfo;
import cn.com.wxd.entity.user.AccountInfo;
import cn.com.wxd.common.PageInfo;
import cn.com.wxd.common.data.KVMap;

/**
 * Title:访问日志业务逻辑层接口
 * Description:cn.com.wxd.biz.log
 * <p>
 * Company: Amumu管理平台
 * Copyright: Copyright (c) 2015
 * All right reserved.
 * Created time: 2016-4-14 下午4:45:33
 *
 * @author WangXuDong
 * @version 1.0
 */
public interface AccessLogService {
    /**
     * 获取总访问量
     *
     * @return
     */
    int getVisitorVolume();

    /**
     * 根据地点获取访问量
     *
     * @param country 国家
     * @param area    地区省份
     * @param city    城市
     *
     * @return
     */
    int getPvbyAddress(String country, String area, String city);

    /**
     * 获取今日访问记录
     *
     * @return
     */
    int getPVofToday();

    /**
     * 归档到访问日志表
     *
     * @param ai 访问记录列表
     *
     * @return 是否成功
     */
    boolean archiveAccessRecode(List<AccesslogInfo> ai);

    /**
     * 添加一条访问记录到临时表
     *
     * @param ati
     *
     * @return
     */
    boolean addAccessRecode(AccesslogTempInfo ati);

    /**
     * 根据IP从临时表中查询记录数量
     *
     * @param ip
     *
     * @return
     */
    int getAccessRecodeCountByIp(String ip);

    /**
     * 从用户记录临时表中获取所有的数据
     *
     * @return
     */
    List<AccesslogTempInfo> selectAccesslogFormTemp();

    /**
     * 插入一条用户日志
     *
     * @param userLog 用户信息
     * @param operate 操作
     *
     * @return 是否成功
     */
    boolean addUserLog(AccountInfo accountInfo, String operate);

    /**
     * 根据用户id查询用户日志
     *
     * @param userId 用户ID
     * @param page   页面信息
     *
     * @return 用户列表
     */
    List<UserLogInfo> getUserLog(int userId, PageInfo page);

    /**
     * 查询用户日志，根据一些条件，
     *
     * @param param     条件,key为字段名，value为值
     * @param order     排序字段，
     * @param fuzzField 模糊查询字段，为null不模糊查询
     * @param page      分页信息
     *
     * @return 用户日志列表
     */
    List<UserLogInfo> getUserLog(KVMap<String, Object> param, KVMap<String, String> order, List<String> fuzzField,
                                 PageInfo page);

    /**
     * 查询时间段内的用户日志
     *
     * @param userId
     * @param begintime 开始时间
     * @param endtime   结束时间
     * @param page      分页信息
     *
     * @return 日志列表
     */
    List<UserLogInfo> getUserLogInTimeBuc(int userId, String begintime, String endtime, PageInfo page);

    /**
     * 查询dayNum天数的访问量按照从前到后的排序方式
     *
     * @param dayNum
     *
     * @return
     */
    int[] queryGroupByDay(int dayNum);

    /**
     * 查询某一天的访问量
     *
     * @param dateTime 时间格式yyyy-mm-dd
     *
     * @return
     */
    int queryVVByDay(String dateTime);
}
